import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        List<List<Integer>> listList = generate(6);
        for (int i = 0; i < listList.size(); i++) {
            List<Integer> curRow = listList.get(i);
            for (int j = 0; j < curRow.size(); j++) {
                System.out.print(curRow.get(j)+" ");
            }
            System.out.println();
        }
    }

    //1、直角三角形版杨辉三角
    public static List<List<Integer>> generate(int num) {
        // 1、二维集合实现二维数组，从而实现杨辉三角
        List<List<Integer>> listList = new ArrayList<>();
        // 2、先创建第一行对象并填充1,然后放入二维集合
        List<Integer> firstRow = new ArrayList<>();
        firstRow.add(1);
        listList.add(firstRow);

        // 3、第一行已经放入，从第二行开始放接下来的数据
        for (int i = 1; i < num; i++) {
            // 4、创建一维集合，最开始给1
            List<Integer> curRow = new ArrayList<>();
            curRow.add(1);

            // 5、中间数据是上一个行j列和上一行j-1列的元素和
            List<Integer> prevRow = listList.get(i-1);
            //注意：//设置j<i，第二行并不会进入循环，而是只添加curRow的第一个和第二个(也是最后一个)元素为1
            for (int j = 1; j < i; j++) {
                int value = prevRow.get(j)+prevRow.get(j-1);
                curRow.add(value);
            }

            // 6、每行最后一个元素放入1
            curRow.add(1);
            // 7、把第二行开始创建的一维集合依次放入二维集合中
            listList.add(curRow);
        }
        // 8、返回二维集合(数组的集合形式)
        return listList;
    }

    // 2、等腰三角形版的也可以实现，就是找下标麻烦一点
}
